package packLigaDeFutbol;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;


public class GestorTemporadas {
	private static GestorTemporadas miGestor = new GestorTemporadas();
	private ListaEquipos listaEquipos = new ListaEquipos();
	private ListaArbitros listaArbitros = new ListaArbitros();

	private GestorTemporadas() {

	}

	public static GestorTemporadas get() {
		if(miGestor == null) {
			miGestor = new GestorTemporadas();
		}
		return miGestor;
	}

	/**
	 * @author jonatanperez
	 * Inserta una nueva temporada en la BD
	 */
	public int insertarTemporadaEnBD(Temporada pTemporada) {
		int res = -1;
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String fecha = sdf.format(pTemporada.getFechaInicio().getTime());
		String strSQL = "INSERT INTO temporada(fechaInicio) " + 
						"VALUES ('" + 
						fecha + 
						"');";
		try {	
			res = Principal.BBDD.ultimoID(strSQL);
		}
		catch(SQLException e) {
			e.printStackTrace();
		}
		return res;
	}
	
	/**
	 * @author jonatanperez
	 * Inserta un equipo participante en una temporada
	 */
	public boolean insertarEquipoEnBD(Temporada pTemporada) {
		boolean correcto = false;
		String strSQL = "";
		try {
			for (Equipo equipoActual : listaEquipos.getListaEquipos()) {
				strSQL = "INSERT INTO temporadaequipo " +
						 "VALUES (" + 
						 pTemporada.getID() + ", " +
						 equipoActual.getID() +
						 ");";
				Principal.BBDD.agregarSentencia(strSQL);
			}
			Principal.BBDD.ejecutarSentencias();
			correcto = true;
		}
		catch(SQLException e) {
			e.printStackTrace();
		}
		return correcto;
	}

	public void agregarEquipoALista(Equipo pEquipo) {
		listaEquipos.getListaEquipos().add(pEquipo);
	}

	/**
	 * @author jonatanperez
	 * Inserta un árbitro participante en una temporada
	 */
	public boolean insertarArbitroEnBD(Temporada pTemporada) {
		boolean correcto = false;
		String strSQL = "";
		try {
			for (Arbitro arbitroActual : listaArbitros.getListaArbitros()) {
				strSQL = "INSERT INTO temporadaarbitro " +
						 "VALUES (" + 
						 pTemporada.getID() + ", " +
						 arbitroActual.getID() +
						 ");";
				Principal.BBDD.agregarSentencia(strSQL);
			}
			Principal.BBDD.ejecutarSentencias();
			correcto = true;
		}
		catch(SQLException e) {
			e.printStackTrace();
		}
		return correcto;
	}

	/**
	 * @author jonatanperez
	 */
	public void agregarArbitroALista(Arbitro pArbitro) {
		listaArbitros.getListaArbitros().add(pArbitro);
	}
	
	/**
	 * @author Asier 
	 * @return pIdTemp
	 */
	/*
	public int temporadaActual() {
		//Arreglar el uso del calendar que yo no se
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		int anyo = Calendar.getInstance().get(Calendar.YEAR);
		Calendar calendar = new GregorianCalendar(anyo,0,1);
		System.out.println(sdf.format(calendar.getTime()));
		int idTemp = 0;
		try {
			ResultSet rs = Principal.BBDD.consulta("SELECT idTemporada FROM temporada WHERE fechaInicio = '" + sdf.format(calendar.getTime()) + "';");
			if(rs.next()) {
				idTemp = rs.getInt(1);
			}
		}catch(SQLException e) {
			e.printStackTrace();
		}
		System.out.println(idTemp);
		return idTemp;
	}*/
	
	/**
	 * @author Andoni
	 * Devuelve el id temporada actual (supuestamente este mismo a�o)
	 * 
	 * @return Devuelve -1 si no hay temporada para el a�o actual, sino se devuelve el ID
	 */
	public int temporadaActual(){
		int ret = -1;
		ResultSet rs = null;
				
		String strSQL = "select idTemporada " +
						"from temporada " +
						"where DATE_FORMAT(fechaInicio, '%Y') = DATE_FORMAT(current_date(), '%Y');";
		
		try {
			rs = Principal.BBDD.consulta(strSQL);
			if(rs.first())
				ret = rs.getInt("idTemporada");
			
		} catch (SQLException ex) {
			System.out.println("SQLException: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("VendorError: " + ex.getErrorCode());
		}
		return ret;
	}
	
}